# 2024.06.16——比特Python自学笔记
# 常量、表达式、变量与数据类型
# 在表达式中1/2/3/4……这些称为字面常量，+、-、*、/这些称为运算符或操作符
# 在表达式中，我们可以通过空格来使表达式展现得更为美观
print(2 + 1 / 3)  # +、-、*、/这些运算符在进行运算时同样遵循先乘除后加减的原则
# 练习：输出67.9 、 89.0 、 12.9 、 32.2这四个浮点数的平均值
print((67.9 + 89.0 + 12.9 + 32.2) / 4)
# Python中的变量
Sum = 67.9 + 89.0 + 12.9 + 32.2
avg = Sum / 4
ch = 'abcd'
ch1 = 'a'
print(sum)
print(avg)
print(ch)
print(ch1)
# 在Python中我们在定义变量时可以不用像C/C++中指定变量的数据类型
# 在Python中字符和字符串都是通过单引号引起
# 变量的定义的硬性规则：
# 1.变量名必须由数字，字母，下划线构成~
# 如：a1/a_1/a1_都是合法的变量名
# 2.在变量名中数字不能作为开头且变量名中不能包含特殊符号
# 如：1a/a*a这种就不是合法的变量名
# 3.变量名不能和Python中的关键字重名~
# 如：if是Python中的条件语句关键字，那我们就不能将if作为变量名
# 4.变量中要严格区分大小写
# 如：num = 10和Num = 10这里是定义的两个变量
# 变量定义的软性规则：
# 1.给变量命名时，尽量用能够描述变量含义的单词来表示~
# 如：记录数量可以使用count、记录总和可以使用sum……
# 2.当我们使用1个单词描述不清楚时，可以使用多个单词来命名~
# 不怕变量名字长，而怕变量的含义表达的不清楚~
# 命名方法：
# 1.驼峰命名法：除了第一个单词的首字母之外，后序每个单词的首字母都大写~
# 2.蛇形命名法：单词之间使用下划线来进行分割
# 变量的使用——1.读取变量的值2.修改变量的值
# 变量的类型
# 整型变量—— a = 10
# 浮点类型—— b = 1.0
# 字符类型—— ch = 'a'
# type()——python中的内置函数，可以获取变量的数据类型
a = 10
print(type(a))
# 在Python中，变量的数据类型不需要在定义变量时显示声明
# 而是在初始化时，根据初始化的值的类型来进行确定
# 在Python中，int能够表示的数据范围是无穷的
# 在C++中，int类型为整型，大小为4个字节能够表示的范围是-2^31~2^30-1
# 在JAVA中，int能够表示的范围到-21亿~21亿
# 在Python中，int表示的整型没有短整型、长整型之分，因此像short/long/long long等数据类型是不存在的
# Python中的int可以根据要表示的数据的大小实现自动扩容~
b = 1.0
print(type(b))
# 在Python中，float表示的是双精度浮点型，等价于C++/JAVA中的double类型
# 在C++/JAVA中，float表示的是单精度浮点型，占4个字节的空间大小
# Python中的一个设计哲学——解决一个问题，只提供一种解决方案
ch = 'a'
ch1 = "a"
print(type(ch))
print(type(ch1))
# 在Python中，str表示的是字符串类型
# 在Python中，字符串的表示使用单引号和双引号都是可以的
# 在Python中，红色波浪线表示错误，黄色波浪线表示警告，绿色波浪线表示拼写检查（不是错误）
# 之所以有单引号、双引号两种表示方式，是因为为了避免在字符串中存在引号时产生错误
# 如：c = "My name is "Noah""。在这个字符串变量中，双引号的里面已经有了一个双引号，此时Python会将前两个双引号凑成一对，将后两个双引号凑成一对
# 这时就得到了3部分——“My name is" 、 Noah 、 ""，此时编译器是无法识别Noah的，这时我们就需要借助不同的引号来进行表示，如下所示：
c = 'My name is "Noah" '
print(type(c))
# 此时就可以正常识别整个字符串的内容
# 在Python中表示字符串时，如果字符串中存在单引号，则最外层用双引号
# 如果字符串中存在双引号，则最外层用单引号
# 如果字符串中既存在单引号又存在双引号，则最外层可以用三个引号表示——三个单引号'''或者三个双引号"""
d = '''My 'name' is "Noah"'''
print(type(d))
# 在Python中不管是单引号、双引号还是三个引号，它们所表示的字符串都是等价的关系，哪个好用，我们就用哪个
# 字符串的使用
# 在Python中，可以通过库函数len()来计算字符串的长度
print(d)
print(len(d))
# 还可以通过运算符+来实现字符串的拼接
e = 'hello '
f = 'world'
print(e + f)
# 在C/C++中，字符char也是一个整型，因此可以进行字符 + 数字的操作
# 在Python中，字符串str不是整型，因此不能进行字符串 + 数字的操作
# 如：print(a + e)。在这个代码中是无法正常实现整型加字符串的操作
# 在Python中，报错有两类：
# 语法错误：当发生语法错误时，在程序运行之前编译器就能将错误识别出来
# 运行错误：当发生运行错误时，只能在程序运行之后编译器才能将错误识别出来
g = True
print(type(g))
# 在Python中，bool表示的是布尔类型，和C++/JAVA一样，只有真和假两个值
# 但是与C++/JAVA不同的是，在Python中的布尔值首字母需要大写
# 除了上述类型外，在Python中还存在一些其他的类型。如列表类型——list/元组类型——tuple/字典类型——dict/自定义类型……
# 数据类型的意义
# 1.不同的类型占用的内存空间是不同的
# 如int 默认为4个字节，但是能够进行动态扩容
# float固定8个字节
# bool固定1个字节
# str可以变长
# 2.不同的类型，对应能够执行的操作也是不同的
# 如int/float可以实现+、-、*、/等操作，但无法实现len
# 如str可以实现+，但是不能-、*、/等操作，可以实现len
